/* eslint-disable object-curly-newline,prefer-destructuring,import/first */

/*   用于存放销售订单业务逻辑   */
import * as utils from '../../../../../utils/utils';

// ----------------------------按钮相关功能start---------------------------- //
// -------------------------新增行相关功能start------------------------- //
/**   新增行业务(销售送货单单业务)   */
export function doAddRowBusinessSalesDeliver(addSlaveRow, props) {
  /*   返回值声明   */
  const { masterData } = props;
  /*   执行条件   */
  if (
    utils.isNotEmptyObject(masterData) &&
    utils.isNotEmptyObject(addSlaveRow)
  ) {
    addSlaveRow = changeSlaveWareHouseIdByMaster(masterData, addSlaveRow);
  }
  /*   返回值   */
  return addSlaveRow;
}

/**   通过主表仓库名称变更从表仓库名称   */
export function changeSlaveWareHouseIdByMaster(masterData, addSlaveRow) {
  if (utils.isUndefined(masterData.sWareHouseId)) {
    addSlaveRow.sWareHouseId = '';
  } else {
    addSlaveRow.sWareHouseId = masterData.sWareHouseId;
  }
  return addSlaveRow;
}
// -------------------------新增行相关功能end  ------------------------- //
// ----------------------------按钮相关功能end  ---------------------------- //

// ----------------------------数据修改相关功能start---------------------------- //
// -------------------------主表数据修改start------------------------- //
/**   销售送货单仓库名称带到从表中去   */
export function saleDeliverWareHouseIdFromMasterToSlave(props) {
  /*   处理数据   */
  props = saleDeliverWareHouseIdFromMasterToSlaveData(props);
  /*   处理渲染   */
  props = saleDeliverWareHouseIdFromMasterToSlaveRender(props);
  /*   返回值   */
  return props;
}

/**   销售送货单仓库名称带到从表中去(数据处理)   */
export function saleDeliverWareHouseIdFromMasterToSlaveData(props) {
  /*   待用数据声明   */
  const { slaveData, masterData } = props;
  /*   从表有数据继续玩下去   */
  if (utils.isNotEmptyArr(slaveData)) {
    /*   遍历从表数据,把不是合计项的从表行的sWareHouseId的值都变成主表的sWareHouseId值   */
    for (const each of slaveData) {
      if (!each.dataTotal) {
        each.sWareHouseId = masterData.sWareHouseId;
      }
    }
  }
  /*   返回值   */
  return props;
}

/**   销售送货单仓库名称带到从表中去(数据处理)   */
export function saleDeliverWareHouseIdFromMasterToSlaveRender(props) {
  /*   待用数据声明   */
  const { slaveData } = props;
  let { slaveShowRender } = props;
  slaveShowRender = utils.isEmptyObject(slaveShowRender) ? {} : slaveShowRender;
  /*   执行条件   */
  if (utils.isNotEmptyArr(slaveData)) {
    /*   遍历从表数据   */
    for (const each of slaveData) {
      /*   把不是合计行的从表行中的sWareHouseId都置为true(不存在的这个行则创建一行)   */
      if (!each.dataTotal && utils.isNotEmptyStr(each.sId)) {
        const arr = utils.isEmptyObject(slaveShowRender[each.sId]) ? [] : slaveShowRender[each.sId];
        arr.push('sWareHouseId');
        slaveShowRender[each.sId] = arr;
      }
    }
  }
  /*   返回值赋值   */
  props.slaveShowRender = slaveShowRender;
  props.editTableRender = true;
  /*   返回值   */
  return props;
}
// -------------------------主表数据修改end  ------------------------- //

// -------------------------从表数据修改start------------------------- //
/**   输入数量/箱，包数，零头数量，计算数量   */
export function getCalculateBag(props, obj) {
  /*   获取change数据的key   */
  const key = this.getChangeSName(props);
  /*   dPackQty,dTrunkQty,dFractionQty这三个字段发生改变了才重新计算箱包数据   */
  if (key === 'dPackQty' || key === 'dTrunkQty' || key === 'dFractionQty') {
    /*   待用数据声明   */
    const { sSlaveId, slaveShowRender } = props;
    const item = getChangeSlaveItem(props);
    const { sName } = obj;
    /*   执行条件   */
    if (utils.isNum(item.dPackQty) && utils.isNum(item.dFractionQty)) {
      /*   待用数据赋值   */
      const dPackQty = utils.parseFloatNum(item.dPackQty); /*   包数   */
      const dTrunkQty = utils.convertIsNotNumToNumber1(item.dTrunkQty); /*   数量/箱   */
      const dFractionQty = utils.parseFloatNum(item.dFractionQty); /*   零头数量   */
      const dProductQty = (dPackQty * dTrunkQty) + dFractionQty; /*   数量   */
      item.dTrunkQty = dTrunkQty;
      item[`d${sName}Qty`] = utils.convertStrToNumberUndefined(dProductQty);
      const slaveShowRenderEach = slaveShowRender[sSlaveId];
      slaveShowRenderEach.push('dTrunkQty');
      slaveShowRenderEach.push(`d${sName}Qty`);
    }
    /*   返回值赋值   */
    props.showSlaveRender = slaveShowRender;
    props.editTableRender = true;
    /*   根据数量，计算其他相关值   */
    props = getCalculateByPrice(props, obj);
  }
  /*   返回值   */
  return props;
}

/**   获取当前从表行的值   */
export function getChangeSlaveItem(props) {
  /*   待用数据声明   */
  const { sSlaveId, slaveData } = props;
  /*   获取当前行数据   */
  const slaveDataEach = slaveData.filter(item => item.sId === sSlaveId);
  /*   返回值   */
  return slaveDataEach[0];
}

/**   输入数量, 价格, 税码, 计算计算金额，不含税金额，不含税价格，税额，外币金额，外币税额   */
export function getCalculateByPrice(props, obj) {
  /*   待用数据声明   */
  const { sSlaveId, slaveShowRender, masterData } = props;
  const item = this.getChangeSlaveItem(props);
  const { sName, decimals } = obj;
  /*   执行条件   */
  if (utils.isNum(item[`d${sName}Price`]) && utils.isNum(item[`d${sName}Qty`]) && utils.isNum(masterData.dCurrencyRate)) {
    /*   待用数据赋值   */
    const { dNetPrice, dNetMoney } = decimals;
    const dProductQty = utils.parseFloatNum(item[`d${sName}Qty`]); /* 数量 */
    const dProductPrice = utils.parseFloatNum(item[`d${sName}Price`]); /* 价格 */
    const dTaxRate = utils.parseFloatNum(item.dTaxRate); /* 税率 */
    const dCurrencyRate = utils.parseFloatNum(masterData.dCurrencyRate); /* 汇率 */
    const dProductMoney = dProductQty * dProductPrice; /* 金额 */
    const dProductNoTaxMoney = dProductMoney / (1 + (dTaxRate / 100)); /* 不含税金额 */
    const dProductNoTaxPrice = dProductQty !== 0 ? dProductNoTaxMoney / dProductQty : 0; /* 不含税价 */
    const dProductTaxMoney = dProductMoney - dProductNoTaxMoney; /* 税额 */
    const dProductForeignMoney = dCurrencyRate !== 0 ? dProductMoney / dCurrencyRate : 0; /* 外币金额 */
    const dProductTaxForeignMoney = dCurrencyRate !== 0 ? dProductTaxMoney / dCurrencyRate : 0; /* 外币税额 */
    /*   数据赋值   */
    item[`d${sName}Money`] = utils.convertFixNum(dProductMoney, dNetMoney);
    item[`d${sName}NoTaxMoney`] = utils.convertFixNum(dProductNoTaxMoney, dNetMoney);
    item[`d${sName}NoTaxPrice`] = utils.convertFixNum(dProductNoTaxPrice, dNetPrice);
    item[`d${sName}TaxMoney`] = utils.convertFixNum(dProductTaxMoney, dNetMoney);
    item[`d${sName}ForeignMoney`] = utils.convertFixNum(dProductForeignMoney, dNetMoney);
    item[`d${sName}TaxForeignMoney`] = utils.convertFixNum(dProductTaxForeignMoney, dNetMoney);
    /*   渲染赋值   */
    const slaveShowRenderEach = slaveShowRender[sSlaveId];
    slaveShowRenderEach.push([`d${sName}Money`]);
    slaveShowRenderEach.push([`d${sName}NoTaxMoney`]);
    slaveShowRenderEach.push([`d${sName}NoTaxPrice`]);
    slaveShowRenderEach.push([`d${sName}TaxMoney`]);
    slaveShowRenderEach.push([`d${sName}ForeignMoney`]);
    slaveShowRenderEach.push([`d${sName}TaxForeignMoney`]);
  }
  /*   返回值赋值   */
  props.slaveShowRender = slaveShowRender;
  props.editTableRender = true;
  /*   返回值   */
  return props;
}
// -------------------------从表数据修改end  ------------------------- //
// ----------------------------数据修改相关功能end  ---------------------------- //
